#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[]) {
    // 检查是否有-d参数
    if (argc > 1 && strcmp(argv[1], "-d") == 0) {
        pid_t pid = fork(); // 创建子进程

        if (pid < 0) {
            // fork失败
            fprintf(stderr, "Fork failed\n");
            return 1;
        }

        if (pid > 0) {
            // 父进程直接退出
            printf("Parent process exiting...\n");
            exit(0);
        }

        // 以下代码只有子进程会执行

        // 创建新会话，使进程成为会话首进程，脱离控制终端
        if (setsid() < 0) {
            fprintf(stderr, "Could not create new session\n");
            return 1;
        }

        // 改变当前工作目录到根目录，避免占用可卸载的文件系统
        if (chdir("/") < 0) {
            perror("chdir failed");
            return 1;
        }

        // 关闭标准输入输出和错误输出，因为守护进程通常不使用它们
        close(STDIN_FILENO);
        close(STDOUT_FILENO);
        close(STDERR_FILENO);

        // 在这里执行后台任务...
        while (1) {
            // 例如，每5秒打印一次消息到日志文件
            FILE* file = fopen("/tmp/daemon.log", "a");
            if (file != NULL) {
                fprintf(file, "Daemon is running...\n");
                fclose(file);
            }
            sleep(5); // 等待5秒
        }
    } else {
        printf("Usage: %s -d\n", argv[0]);
    }

    return 0;
}

